2008/04/10

Recent entries from same category

  1. Vim で XML Reformat
  2. Lingr Radar For Linuxってのを書いた
  3. デスクトップアプリケーションでも認証可能なOAuth「xAuth」をpythonから試してみた。
  4. Mumblesを使ったGitHubのGrowl通知アプリケーションを作った。
  5. Python2.6にはcursesのバイナリが含まれていないので作る

pythonにはxmlrpclibがあり、常駐型のSimpleXMLRPCServerやCGIから使えるCGIXMLRPCRequestHandlerというとても有用なモジュールが存在します。
たとえば def plus(num1, num2):
    return num1 + num2
という関数をXMLRPCサーバから公開したい場合 from SimpleXMLRPCServer import CGIXMLRPCRequestHandler
handler = CGIXMLRPCRequestHandler()
handler.register_function(plus)
handler.handle_request()
とすれば出来上がります。
またモジュールとしてインタフェースを提供したい場合は class Foo:
    def plus(self, num1, num2):
        return num1 + num2
というインタフェースに対して from SimpleXMLRPCServer import CGIXMLRPCRequestHandler
handler = CGIXMLRPCRequestHandler()
handler.register_instance(Foo())
handler.handle_request()
こうすれば出来上がり。
先ほど、NabeAtzz APIをXMLRPCとして呼び出せるインタフェースを作りました。
エントリポイントは
http://mattn.appspot.com/nabeatzz_xmlrpc
となります。試しにpythonでXMLRPC Clientを作成し呼び出してみます。
# -*- coding: utf-8 -*-
import sys
from xmlrpclib import ServerProxy

api = ServerProxy("http://mattn.appspot.com/nabeatzz_xmlrpc")
for n in range(1, 11):
  res = api.nabeatzz(n)
  print "%s : %s" % (res['number'], res['japanese'])
  if res.has_key('nabeatzz'):
    for c in res['nabeatzz']:
      print "  %s" % c
コードはこんな感じでしょうか。これを実行すると正しく
1 : いち
2 : に
3 : さん
  アホになる
4 : よん
5 : ご
  犬っぽくなる
6 : ろく
  アホになる
7 : なな
8 : はち
9 : きゅう
  アホになる
10 : じゅう
  犬っぽくなる
という結果が得られました。
Posted at by